CodeCommitへオンプレのような内部ネットワークからだけGitさせたい(その2)

CodeCommitへオンプレのような内部ネットワークからだけGitさせたい(その2)

Clock Icon2023.07.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、シマです。
先日、以下の記事を書きました。

先日の構成の場合、DNSの設定を変更するためDNSを利用している全てのユーザに影響のある設計となっています。しかし、1つのプロジェクトだけで内部ネットワークからgitさせたいようなケースの場合は、DNSへの設定変更は難しいと思います。今回はオンプレDNSの設定を変更せず、VPCエンドポイントを直接利用する方法を試してみました。

構成

基本的には前回と同じ構成です。疑似オンプレVPCを作成し、CodeCommitエンドポイントを配置したVPCとTransit Gatewayで接続しています。前回と違い、オンプレのDNSに条件付きフォワーダの設定はせずに、インターネットの名前解決ができる環境とします。

CodeCommitへのアクセスはエンドポイント経由でアクセスすることで、内部からアクセス可能にしています。CodeCommitエンドポイントを配置するVPCとオンプレ相当VPCはTransitGatewayで接続しています。また、オンプレ相当VPCからCodeCommitエンドポイントの名前解決のために、DNS(WindowsServer)を用意しています。DNSではフォワーダーとしてパブリックDNSを設定しており、インターネット上の名前解決が出来るようにしています。Gitオペレーションを実行するEC2(Client)はDNS(WindowsServer)で名前解決するように設定しています。

必要な設定

1. git用CodeCommitエンドポイント

詳細は割愛しますが、前回同様に対象VPCにCodeCommitへgitコマンド発行用エンドポイントを作成します。

2. IAMユーザのポリシー

こちらも前回同様に、対象ユーザのポリシー設定において、前述で作成したVPCEndpointからのアクセスのみ許可するように指定します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codecommit:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-xxxxxx"
        }
      }
    }
  ]
}

gitする時の変更点

このまま、EC2(Client)から以下のコマンドを実行してもエラーになってしまいます。

$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/TestRepository
Cloning into 'TestRepository'...
fatal: unable to access 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/TestRepository/': The requested URL returned error: 403

これは前回とは違い「git-codecommit.ap-northeast-1.amazonaws.com」のアクセスがインターネット経由でのアクセスになっており、前述で設定したIAMユーザのポリシーにより特定のVPCEndpointからのアクセスのみ許可するようにしているためです。そのため、今回の構成では特定のVPCEndpointを指定するURLでアクセスする必要があります。
AWS管理コンソールのエンドポイントのページからDNS名を確認します。

※要件によりAZを指定したアクセスを行う場合は、「ap-northeast-1a」のようなものを含んでいるDNS名を使用します。

確認したDNS名と「git-codecommit.ap-northeast-1.amazonaws.com」を置き換えて、先ほどのコマンドを実行します。

$ git clone https://vpce-0123456789abcdef-01234567.git-codecommit.ap-northeast-1.vpce.amazonaws.com/v1/repos/TestRepository
Cloning into 'TestRepository'...
remote: Counting objects: 3, done.
Unpacking objects: 100% (3/3), 219 bytes | 219.00 KiB/s, done.

正常にアクセスできました。

最後に

前回の記事を書いた後で、DNSの設定変更ってハードルが高いケースがあるなーと感じて今回の構成を記事にしてみました。

本記事がどなたかのお役に立てれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.